-
Notifications
You must be signed in to change notification settings - Fork 139
Updated benchmark scripts to run on rpi + stm32h563 #682
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
danielinux
commented
Feb 9, 2026
| Name | Configuration | Bootloader size | Stack size | Image header size | Application size | Boot time |
|---|---|---|---|---|---|---|
| SHA2 only | SIGN=NONE | 10600 | 1216 | 1024 | 103096 | 55.662 ms |
| SHA384 only | SIGN=NONE HASH=SHA384 | 20120 | 3760 | 1024 | 103096 | 98.213 ms |
| SHA3 only | SIGN=NONE HASH=SHA3 | 10264 | 1216 | 1024 | 103096 | 159.116 ms |
| SHA2 only,small | SIGN=NONE NO_ASM=1 | 7144 | 1216 | 1024 | 103096 | 64.379 ms |
| rsa2048 | SIGN=RSA2048 | 17316 | 17568 | 1024 | 103984 | 69.844 ms |
| rsa3072 | SIGN=RSA3072 | 17452 | 12288 | 1024 | 104112 | 85.834 ms |
| rsa4096 | SIGN=RSA4096 | 17612 | 18064 | 1024 | 104240 | 108.302 ms |
| rsa4096 with sha384 | SIGN=RSA4096 HASH=SHA384 | 27304 | 18064 | 1024 | 104240 | 154.711 ms |
| ecdsa256 | SIGN=ECC256 | 24784 | 7632 | 1024 | 103720 | 75.611 ms |
| ecdsa384 | SIGN=ECC384 | 25656 | 11216 | 1024 | 103752 | 297.082 ms |
| ecdsa521 | SIGN=ECC521 | 29292 | 8480 | 1024 | 103788 | 404.038 ms |
| ecdsa256 with small stack | SIGN=ECC384 WOLFBOOT_SMALL_STACK=1 | 25208 | 5880 | 1024 | 103752 | 295.158 ms |
| ecdsa256 with fast math | SIGN=ECC384 SP_MATH=0 | 25656 | 11216 | 1024 | 103752 | 297.073 ms |
| ecdsa256, no asm | SIGN=ECC256 NO_ASM=1 | 16084 | 7632 | 1024 | 103720 | 352.741 ms |
| ecdsa384, no asm | SIGN=ECC384 NO_ASM=1 | 17436 | 11216 | 1024 | 103752 | 954.500 ms |
| ecdsa521, no asm | SIGN=ECC521 NO_ASM=1 | 16376 | 8480 | 1024 | 103788 | 1960.132 ms |
| ecdsa384 with sha384 | SIGN=ECC384 HASH=SHA384 | 35176 | 11216 | 1024 | 103752 | 338.830 ms |
| ed25519 with sha384, small | SIGN=ED25519 HASH=SHA384 NO_ASM=1 | 12860 | 5000 | 1024 | 103688 | 1580.776 ms |
| ed25519 fast | SIGN=ED25519 NO_ASM=0 | 29664 | 5000 | 1024 | 103688 | 1589.512 ms |
| ed448 | SIGN=ED448 | 19576 | 4578 | 1024 | 103716 | 5793.993 ms |
| ML_DSA-44 | SIGN=ML_DSA ML_DSA_LEVEL=2 IMAGE_SIGNATURE_SIZE=2420 IMAGE_HEADER_SIZE=8192 | 21524 | 25000 | 8192 | 104984 | 82.791 ms |
| ML_DSA-65 | SIGN=ML_DSA ML_DSA_LEVEL=3 IMAGE_SIGNATURE_SIZE=3309 IMAGE_HEADER_SIZE=8192 | 22164 | 25000 | 8192 | 105624 | 99.279 ms |
| ML_DSA-87 | SIGN=ML_DSA ML_DSA_LEVEL=5 IMAGE_SIGNATURE_SIZE=4627 IMAGE_HEADER_SIZE=12288 | 22804 | 25000 | 12288 | 106264 | 127.807 ms |
| LMS 1-10-8 | SIGN=LMS LMS_LEVELS=1 LMS_HEIGHT=10 LMS_WINTERNITZ=8 IMAGE_HEADER_SIZE=4096 IMAGE_SIGNATURE_SIZE=1456 | 13416 | 1320 | 4096 | 103716 | 207.703 ms |
| XMSS-SHA2_10_256' | XMSS_PARAMS=XMSS-SHA2_10_256 SIGN=XMSS IMAGE_SIGNATURE_SIZE=2500 IMAGE_HEADER_SIZE=8192 | 14236 | 9352 | 8192 | 103724 | 189.553 ms |
| ML_DSA-65 hybrid with ECDSA384 | SIGN=ML_DSA ML_DSA_LEVEL=3 IMAGE_SIGNATURE_SIZE=3309 IMAGE_HEADER_SIZE=8192 SIGN_SECONDARY=ECC384 WOLFBOOT_UNIVERSAL_KEYSTORE=1 | 38820 | 25000 | 8192 | 107592 | 341.706 ms |
| ML_DSA-87 hybrid with ECDSA521 | SIGN=ML_DSA ML_DSA_LEVEL=5 IMAGE_SIGNATURE_SIZE=4627 IMAGE_HEADER_SIZE=12288 SIGN_SECONDARY=ECC521 WOLFBOOT_UNIVERSAL_KEYSTORE=1 | 43700 | 25000 | 12288 | 108872 | 477.560 ms |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Updates the benchmarking and emulation tooling to support running boot-time benchmarks from a Raspberry Pi against an STM32H5/H563 target, plus associated build/config tweaks to enable consistent timing and sizing measurements.
Changes:
- Add a new
libgpiod-based boot-time measurement script and switch the benchmark runner to OpenOCD + GPIO edge timing. - Introduce build flags (
WOLFBOOT_TEST_FILLER,WOLFBOOT_TIME_TEST) and early-boot GPIO toggling to support boot-time measurements. - Adjust emulation linker templates and config-generation flow for multiple targets (STM32*, nRF, MCX).
Reviewed changes
Copilot reviewed 20 out of 20 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/scripts/boot-time.py | New GPIO edge-timestamp based boot-time measurement script (libgpiod). |
| tools/scripts/benchmark.sh | Switch benchmark flashing to OpenOCD and delegate timing to boot-time.py; add “Application size” column. |
| tools/check_config/Makefile | Adds CROSS_COMPILE/CC support for building check_config. |
| test-app/startup_arm.c | Calls an early boot-time pin toggle for STM32H5 when WOLFBOOT_TIME_TEST is enabled. |
| test-app/emu-test-apps/test.sh | Updates how target.h is generated and how check_config is built; adds per-emu linker template support. |
| test-app/emu-test-apps/stm32u585/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/stm32l552/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/stm32h563/target_v8.ld | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/stm32h563/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/nrf5340/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/emu-test-apps/mcxw71/target.ld.in | Fix RAM region definition for emulation linker script. |
| test-app/app_stm32h7.c | Make filler data optional behind WOLFBOOT_TEST_FILLER. |
| test-app/app_stm32h5.c | Gate keystore usage when signing is disabled; add early boot-time GPIO toggle; optional filler. |
| test-app/Makefile | Avoid linking keystore objects into test-app when SIGN=NONE. |
| test-app/ARM-stm32h5.ld | Increase RAM size in linker script template. |
| test-app/ARM-stm32h5-ns.ld | Increase RAM size in non-secure linker script template. |
| src/image.c | Silence unused stored_secondary_signature_size. |
| options.mk | Add build flags for timing/filler; adjust ECC521 stack usage number. |
| include/image.h | Add an extra compare_res; statement inside RSA verification macro. |
| config/examples/stm32h5-no-tz.config | New STM32H5 no-TrustZone example config used by benchmark script. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.